package cn.com.adcc.utils;


import org.apache.log4j.Logger;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

import java.io.File;

public class JettyServer implements Runnable{

    private static Logger log=Logger.getLogger(JettyServer.class);

    private void startJetty(){
        String contextpath = "/";
        String userDir = System.getProperty("user.dir");
        String filePath = userDir + File.separator + "config" + File.separator + "config.properties";
        String port = Configuration.GetValueByKey(filePath, "JETTYPORT");
        String descriptorpath = Configuration.GetValueByKey(filePath, "JETTYDECRIPTOR");

        log.info("port:" + port);
        try {
            Server server = new Server(Integer.parseInt(port));

            server.setStopAtShutdown(true);
            //创建服务上下文
            WebAppContext context = new WebAppContext();
            //设置访问路径，这是访问服务http://{ip}:8080/RestJersey
            context.setContextPath(contextpath);
            context.setConfigurationDiscovered(true);
            //指明服务描述文件，就是web.xml
            context.setDescriptor(descriptorpath);
            //指定服务的资源根目录，资源寻找与根目录有关
            context.setResourceBase(userDir);
            //测试服务器参数是否有效
            if(Integer.parseInt(port)==0){
                log.error("请指定有效的服务器端口");
            }else{
                if(contextpath.equals("")){
                    log.error("请指定有效的上下文路径");
                }else{
                    if(descriptorpath.equals("")){
                        log.error("请指定有效的描述文件路径");
                    }else{
                        File dfile=new File(descriptorpath);
                        if(!dfile.exists()){
                            log.error("描述文件路径错误或文件不存在");
                        }else{
                            server.setHandler(context);
                            try{
                                server.start();
                                log.info("服务器启动成功");
                                server.join();
                            }
                            catch (Exception e) {
                                log.error(e.getMessage());
                                System.exit(1);
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            log.error(e.getMessage());
        }
    }

    @Override
    public void run() {
        startJetty();
    }
}
